package 中等.贪心思想;

/**
 * 给定两个整数 a 和 b ，返回 任意 字符串 s ，要求满足：
 * s 的长度为 a + b，且正好包含 a 个 'a' 字母与 b 个 'b' 字母；
 * 子串 'aaa' 没有出现在 s 中；
 * 子串 'bbb' 没有出现在 s 中。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/string-without-aaa-or-bbb
 */
public class 不含AAA或BBB的字符串_984 {

    public static void main(String[] args) {

    }

    /**
     * 贪心思想
     * 应该优先放置较多的那个字符
     * 如果 a > b ，一直 aab 放置，最后 a == b，采用 ab 的放置到最后，
     * 这样不必考虑前面 aab 的放置和 ab 的连接会变成 aaa 或者 bbb
     * 如果 b > a ...
     *
     * @param a
     * @param b
     * @return
     */
    public String strWithout3a3b(int a, int b) {
        StringBuilder stringBuilder = new StringBuilder();

        while (a > b && b >= 1) {
            stringBuilder.append("aab");
            a -= 2;
            b--;
        }
        // 和上面的循环只可能进行其中一个
        while (b > a && a >= 1) {
            stringBuilder.append("bba");
            b -= 2;
            a--;
        }
        while (a == b && a > 0) {
            stringBuilder.append("ab");
            a--;
            b--;
        }
        while (a > 0) {
            stringBuilder.append("a");
            a--;
        }
        while (b > 0) {
            stringBuilder.append("b");
            b--;
        }

        return stringBuilder.toString();
    }

}
